МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ „ЛЬВІВСЬКА ПОЛІТЕХНІКА”
ІКТА
Кафедра Захист інформації
Розрахунково-графічна робота №1
з курсу:
„ Програмування комп’ютерної графіки ”
на тему:
„ ПОБУДОВА ЗОБРАЖЕНЬ НА ЕКРАНІ КОМП’ЮТЕРА ”
Львів – 2012
Мета роботи : набути практичних навиків в складанні програм для побудови зображень на екрані комп’ютера за допомогою засобів мови С.
Варіант 1
Завдання :
Побудувати графік функції, заданої таблично. Графік повинен відображати результати розрахунків, які записані у файлі на диску. Масштаб розмітки осей координат графіка повинен відповідати реальним результатам розрахунків. Параметри для побудови графіка визначені в таблиці 2. Варіант завдання визначає викладач.
Необхідно передбачити “плаваючий” центр координат – основну частину екрану мають займати ті чверті, в яких знаходиться графік функції..
y=arctg(x) x =[-50;50]
Блок-схема алгоритму програми
/
/
/
/
Розрахунок функціональних залежностей для побудови графіка.
xd = b-a;
xmashd = rect.right - rect.left;
yd = ymax-ymin;
ymashd = rect.bottom - rect.top;
ky = (ymashd - y_retreat_bottom - y_retreat_top)/yd;
kx = (xmashd - x_retreat_left - x_retreat_right)/xd;
x_axis = x_retreat_left - kx * a;
y_axis = y_retreat_top + ky * ymax;
Список ідентифікаторів констант, змінних, процедур і функцій, використовуваних в програмі та їх пояснення
hPen – перо товщиною 3 рх;
CPen – функція для створення пера;
LineTo – проводить лінію з поточної вершини до точки, координати якої задані;
MoveToEx – переміщує поточну вершину;
FloodFill – зафарбовує замкнуту область;
SelectObject – вибирає потрібний пензль або перо;
DeleteObject - видаляє потрібний пензль або перо;
GetClientRect – визначення параметрів екрану користувача;
CString – оголошення змінної для виведення тексту;
kx, ky – змінні коефіціентів перетворення;
xd, yd, xmashd, ymashd - різниця мінімальних і максимальних координат;
xmash, ymash – машинні координати;
x, y - реальні координати;
h – інтервал;
ymax, ymin, – мінімальні і максимальні значення функції;
a = -50; - Початкове значення проміжку;
b = 50; - Кінцеве значення проміжку ;
x_retreat_left, x_retreat_right, y_retreat_bottom, y_retreat_top - Відступи по краях;
x_axis, y_axis – машинны координати осей;
F – змінна функції;
Y, X, O, d, ss, ssss, A – змінні для виведення розмітки осей.
Текст програми:
// ChildView.cpp : implementation of the CChildView class
//
#include "stdafx.h"
#include "lr1.h"
#include "ChildView.h"
#include <cmath>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CChildView
CChildView::CChildView()
{
}
CChildView::~CChildView()
{
}
BEGIN_MESSAGE_MAP(CChildView, CWnd)
ON_WM_PAINT()
END_MESSAGE_MAP()
// CChildView message handlers
BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs)
{
if (!CWnd::PreCreateWindow(cs))
return FALSE;
cs.dwExStyle |= WS_EX_CLIENTEDGE;
cs.style &= ~WS_BORDER;
cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS,
::LoadCursor(NULL, IDC_ARROW), reinterpret_cast<HBRUSH>(COLOR_WINDOW+1), NULL);
return TRUE;
}
double F(double x) {
return atan(x); // Задаємо функцію
}
void CChildView::OnPaint()
{
SEGdc dcc(this); // device context for painting
RECT rect;
GetClientRect(&rect);
// Змінні для побудови графіку - ПОЧАТОК
int xmash, ymash, x_axis, y_axis, x_retreat_left, x_retreat_right, y_retreat_bottom, y_retreat_top;
double y, kx, ky, xmashd, xd, ymashd, yd, a, b, h, ymax, ymin;
x_retreat_left = x_retreat_right = y_retreat_bottom = 70; // Відступи по краях
y_retreat_top = 250;
a = -50; // Початкове значення проміжку
b = 50; // Кінцеве значення проміжку
h = 0.01; // Крок
// Змінні для побудови графіку - КІНЕЦЬ
//Визначення мінімального і максимального значення - ПОЧАТОК
ymax = F(a);
ymin = F(a);
for (double x = a; x < b; x = x + h) {
y = F(x);
if (ymax < y)
ymax = y;
else;
if (ymin > y)
ymin = y;
else;
}
//Визначення мінімального і максимального значення - КІНЕЦЬ
...